/*
must be used with oled.h and font.h
*/
#include "oled.h"
#include "KEY44.h"

void Print_ckey(int n)
{
	char stbuff[15]={"current key:"};
	stbuff[13]=(char)(n%10)+'0';
	n/=10;
	stbuff[12]=(char)n+'0';
	stbuff[14]='\0';
	OLED_NewFrame();
	OLED_PrintString(1,18,stbuff,&font16x16,OLED_COLOR_NORMAL);
	OLED_ShowFrame();
}

int gckey()
{
	int ans=0;
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,1);
	HAL_Delay(1);
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1)ans=1;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==1)ans=2;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==1)ans=3;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==1)ans=4;
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,0);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,1);
	HAL_Delay(1);
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1)ans=5;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==1)ans=6;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==1)ans=7;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==1)ans=8;
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,1);
	HAL_Delay(1);
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1)ans=9;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==1)ans=10;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==1)ans=11;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==1)ans=12;
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,1);
	HAL_Delay(1);
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1)ans=13;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==1)ans=14;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==1)ans=15;
	if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==1)ans=16;
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,0);
	return ans;
}

void KEY_init()
{
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,0);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,0);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,0);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,0);
}

int KEY_getnumber()
{
	int ansbuf=0,retbuf=0,flag=0;
	char cans[6]={"__.__"};
	OLED_NewFrame();
	OLED_PrintString(1,18,cans,&font16x16,OLED_COLOR_NORMAL);
	OLED_ShowFrame();
	while(flag==0)
	{
		while(ansbuf==0)
		{
			ansbuf=gckey();
		}
		retbuf=retbuf*10+ansbuf;
		cans[0]=ansbuf+'0';
		ansbuf=0;
		OLED_PrintString(1,18,cans,&font16x16,OLED_COLOR_NORMAL);
		OLED_ShowFrame();
		HAL_Delay(50);
		while(ansbuf==0)
		{
			ansbuf=gckey();
		}
		retbuf=retbuf*10+ansbuf;
		cans[1]=ansbuf+'0';
		ansbuf=0;
		OLED_PrintString(1,18,cans,&font16x16,OLED_COLOR_NORMAL);
		OLED_ShowFrame();
		HAL_Delay(50);
		while(ansbuf==0)
		{
			ansbuf=gckey();
		}
		retbuf=retbuf*10+ansbuf;
		cans[3]=ansbuf+'0';
		ansbuf=0;
		OLED_PrintString(1,18,cans,&font16x16,OLED_COLOR_NORMAL);
		OLED_ShowFrame();
		HAL_Delay(50);
		while(ansbuf==0)
		{
			ansbuf=gckey();
		}
		retbuf=retbuf*10+ansbuf;
		cans[4]=ansbuf+'0';
		ansbuf=0;
		OLED_PrintString(1,18,cans,&font16x16,OLED_COLOR_NORMAL);
		OLED_PrintString(1,34,"pressC1R4 to confirm",&font16x16,OLED_COLOR_NORMAL);
		OLED_ShowFrame();
		HAL_Delay(100);
		while(ansbuf==0)
		{
			ansbuf=gckey();
		}
		if(ansbuf==13)flag=1;
		else ansbuf=0;
		return retbuf;
	}
}